package com.nan.gbd.library.sip;

import com.nan.gbd.library.JNIBridge;
import com.nan.gbd.library.sip.account.DevConfig;
import com.nan.gbd.library.sip.account.SipConfig;
import com.nan.gbd.library.utils.AccountConfig;
import com.nan.gbd.library.utils.Logger;

/**
 * @author NanGBD
 * @date 2020.6.8
 */
public class SipUaNative {

    /**
     * 初始化国标设备
     *
     * @return 0:成功，否则失败
     */
    public static synchronized int init() {
        SipConfig sipConfig = AccountConfig.getInstance().getSipConfig();
        if (null == sipConfig) {
            Logger.e("sip config  cannot null");
            return -1;
        }
        Logger.e("sip config  content:" + sipConfig.toString());
        DevConfig devConfig = AccountConfig.getInstance().getDevConfig();
        if (null == devConfig) {
            Logger.e(" device config cannot null");
            return -1;
        }
        Logger.e("sip devConfig  content:" + devConfig.toString());
        return JNIBridge.nanUaInit(
                sipConfig.getServerIp(),
                sipConfig.getServerPort(),
                sipConfig.getServerId(),
                sipConfig.getServerDomain(),
                devConfig.getGmLevel(),
                devConfig.getName(),
                devConfig.getManufacturer(),
                devConfig.getModel(),
                devConfig.getFirmware(),
                devConfig.getSerialNumber(),
                devConfig.getChannel(),
                sipConfig.getUserId(),
                sipConfig.getUserId(),
                sipConfig.getPassword(),
                devConfig.getPort(),
                devConfig.getProtocol(),
                devConfig.getRegExpiry(),
                devConfig.getHeartbeatInterval(),
                devConfig.getHeartbeatCount(),
                devConfig.getLongitude(),
                devConfig.getLatitude(),
                sipConfig.getVideoChannel(),
                sipConfig.getAudioChannel(),
                sipConfig.getAlarmChannel(),
                devConfig.getCharset(),
                devConfig.getInviteCount(),
                devConfig.getVoiceCount(),
                devConfig.getPosCapability(),
                devConfig.isGlobalAuth() ? 1 : 0);
    }


    /**
     * 异步注册设备到国标服务平台, 是否注册成功通过事件回调获取
     *
     * @return 0:成功, 否则失败
     */
    public static synchronized int register() {
        return JNIBridge.nanUaRegister();
    }

    /**
     * 异步注销从国标国标服务平台, 是否注销成功通过事件回调获取
     *
     * @return 0:成功, 否则失败
     */
    public static synchronized int unregister() {
        return JNIBridge.nanUaUnregister();
    }

    /**
     * 设备是否注册成功到国标服务平台
     *
     * @return true:已注册, 否则未注册
     */
    public static synchronized boolean isRegistered() {
        return JNIBridge.nanUaIsRegistered();
    }

    /**
     * 通知设备配置信息是否发生变化
     *
     * @param changed
     */
    public static synchronized void onConfigChanged(boolean changed) {
        JNIBridge.nanUaOnConfigChanged(changed);
    }

    /**
     * 获取设备证书
     *
     * @return 设备证书
     */
    public String getDeviceCert() {
        return JNIBridge.nanUaGetDeviceCert();
    }

    /**
     * 设置服务证书
     *
     * @param serverId 服务国标id
     * @param cert     服务证书
     * @param isFile   证书是文件还是内存
     * @param passin   证书密码
     * @return 0:成功, 否则失败
     */
    public synchronized int setServerCert(String serverId, String cert, boolean isFile, String passin) {
        return JNIBridge.nanUaSetServerCert(serverId, cert, isFile, passin);
    }

    /**
     * 设置或更新设备移动位置信息
     *
     * @param mobilePos
     * @return 0:成功, 否则失败
     */
//    public static synchronized int setMobilePos(MobilePos mobilePos) {
//        if (!isRegistered()) return -1;
//        return JNIBridge.nanUaSetMobilePos(mobilePos.getTime(), mobilePos.getLongitude(), mobilePos.getLatitude(),
//                mobilePos.getSpeed(), mobilePos.getDirection(), mobilePos.getAltitude());
//    }

    /**
     * 设置设备报警信息
     *
     * @param alarm
     * @return 0:成功, 否则失败
     */
//    public static synchronized int setAlarm(AlarmInfo alarm) {
//        return JNIBridge.nanUaSetAlarm(alarm.getPriority(), alarm.getMethod(), alarm.getTime(),
//                alarm.getDesc(), alarm.getLongitude(), alarm.getLatitude(),
//                alarm.getAlarmType(), alarm.getEventType());
//    }

    /**
     * 反初始化国标设备
     *
     * @return 0:成功, 否则失败
     */
    public static synchronized int uninit() {
        return JNIBridge.nanUaUninit();
    }

    /**
     * 刷新本地录制视频信息
     *
     * @param startTime 录制开始时间
     * @param endTime   录制结束时间
     * @param address   录制文件路径
     * @param path      视频绝对路径
     * @return
     */
    public static synchronized int putRecordInfo(long startTime, long endTime, String address, String path, long packedFileSize) {
        return JNIBridge.refreshRecordInfo(startTime, endTime, address, path, packedFileSize);
    }

}